feat(thread): show per-message To/Cc/Bcc recipients in thread view#12666
feat(thread): show per-message To/Cc/Bcc recipients in thread view#12666sturlan wants to merge 6 commits intonextcloud:mainfrom
Conversation
Closes nextcloud#11305, nextcloud#9311, nextcloud#4258. Recipients (To, Cc, Bcc) are already returned by the API for every message in a thread but were never displayed in ThreadEnvelope. Add RecipientBubble components in the expanded message header for each recipient list, following the same pattern used for per-message subject-change display. AI-assisted: Claude Code (claude-sonnet-4-6) Signed-off-by: Darko Sturlan <darko.sturlan@gmail.com>
…handling RecipientBubble uses NcUserBubble which renders as an anchor tag. Placing it inside the router-link's click handler caused navigation on click instead of opening the contact popover. Move the recipients section outside the router-link into its own envelope__recipients div. AI-assisted: Claude Code (claude-sonnet-4-6) Signed-off-by: Darko Sturlan <darko.sturlan@gmail.com>
Per ChristophWurst's Sept 2023 design spec: - Hide sender email address in collapsed message state - Apply --color-text-maxcontrast to sender name when expanded - Remove thread-level participant bubble header from Thread.vue along with all associated dead code (participantsToDisplay, moreParticipantsString, updateParticipantsToDisplay, resize listener, RecipientBubble/NcPopover imports) AI-assisted: Claude Code (claude-sonnet-4-6) Signed-off-by: Darko Sturlan <darko.sturlan@gmail.com>
- Fix import order in ThreadEnvelope.vue (alphabetical: ConfirmationModal, Error, EventModal, RecipientBubble) - Fix MessageLoadingSkeleton indentation (1 tab → 2 tabs) - Remove extra blank lines in ThreadEnvelope.vue and Thread.vue CSS - Fix SCSS unmatched brace in Thread.vue (leftover from avatar-header removal) - Remove unused currentAccountEmail prop from Thread.vue and its corresponding binding in MailboxThread.vue All 220 unit tests pass; webpack builds cleanly. Signed-off-by: Darko Sturlan <darko.sturlan@gmail.com>
7330563 to
98f2f88
Compare
ChristophWurst
left a comment
There was a problem hiding this comment.
Thank you for the contribution!
Code looks good so far. Please provide before/after screenshots
| inset-inline-start: var(--default-grid-baseline); | ||
| } | ||
|
|
||
| .envelope__recipients { |
There was a problem hiding this comment.
style: this could be broken up into a nested scss structure
src/components/ThreadEnvelope.vue
Outdated
|
|
||
| .envelope__recipients { | ||
| padding-inline: 60px 38px; | ||
| padding-block: 4px; |
There was a problem hiding this comment.
nit: magic numbers. ideally we can leverage the grid spacing var for this. See #9944.
|
Thanks 😎 Then I'm summoning our designer @nimishavijay for a quick design review :) |
- Nest .recipients inside .envelope__recipients (nested SCSS) - Replace magic numbers (60px, 38px, 4px) with CSS variable expressions: padding-inline-start aligns with sender name via border-radius-container + avatar width (10 * grid-baseline) + gap (2 * grid-baseline); padding-inline-end mirrors the container border-radius; gaps and padding-block use --default-grid-baseline Signed-off-by: Darko Sturlan <darko.sturlan@gmail.com>
a44b2bd to
7ba9c07
Compare
Per reviewer feedback: hide To/Cc/Bcc by default; a chevron next to the sender email toggles their visibility. Bubbles use 24px pill size. - Extract senderEmail computed to avoid repeating envelope.from expression - Simplify hasRecipients with optional chaining - Add type="button" to toggle button AI-assisted: Claude Code (claude-sonnet-4-6) Signed-off-by: Darko Sturlan <darko.sturlan@gmail.com>
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |




Summary
Closes #11305, #9311, #4258.
Recipients (To, Cc, Bcc) are already returned by the API for every message
in a thread but were never displayed in
ThreadEnvelope. This PR surfacesthem in the expanded message header using the existing
RecipientBubblecomponent (which provides the NcPopover contact card with reply/copy/add
contact actions).
Also removes the aggregate participant bubble list from the thread header
(
Thread.vue) per the design spec in #4258 — per-message recipients inthe expanded view replace that approach.
Prior attempt: #4315 (2021, closed 2023).
Changes
ThreadEnvelope.vue: render To/Cc/Bcc asRecipientBubblerows whenmessage is expanded; show sender email only when expanded; apply
--color-text-maxcontrastto sender name in expanded stateThread.vue: remove aggregate participant bubble header; remove unusedcurrentAccountEmailpropMailboxThread.vue: remove unused:current-account-emailbindingTest plan
npm run test:unit— all 220 tests passnpm run lint— no errorsAI-assisted: Claude Code (claude-sonnet-4-6)